<?php
class Rstobi_Model_BknRecommend extends Rstobi_Model_Base
{

	// DBコネクション
	private $_db;

	/**
	 * コンストラクタ
	 */
	function __construct() {
		$this->_db = $this->getDbConnection();
		parent::__construct();
	}
	/**
	 * デストラクタ
	 */
	function __destruct() {
		if (!empty($this->_db)) {
			$this->_db->closeConnection();
		}
		//parent::__destruct();
	}

	/**
	* レコメンド物件取得
	*
	* @access	public
	* @param	array
	* @return	void
	*/
	public function getRecommendList($params)
	{
		$sql = "";
		$db_params = array();
		$recommend_params = array();

		// 部屋CDが存在する場合、レコメンド用データ取得
		if($this->_model_search_common->checkvalue($params, 'HeyaCd'))
		{
			$sql = $this->generateBkndataSqlFromHyCd($params, $db_params);
			$bknData = $this->dbGetData($sql, $db_params, $this->_db);

			if (!empty($bknData))
			{
				// 物件データをレコメンド検索用に成形
				$recommend_params['HeyaCd']   = $bknData['HEYA_CD'];
				$recommend_params['PrefCd'][] = $bknData['TODOUFUKEN_CD'];
				$recommend_params['CityCd'][] = $bknData['TODOUFUKEN_CD'] . $bknData['SHIKUCHOUSON_CD'];
				$recommend_params['TownCd'][] = $bknData['TODOUFUKEN_CD'] . $bknData['SHIKUCHOUSON_CD'] . $bknData['CHOUMEI_CD'];
				$recommend_params['RailCd'][] = $bknData['ENSEN_CD01'];
				$recommend_params['StCd'][]   = $bknData['EKI_CD01'];
				$recommend_params['ido']      = $bknData['IDO'];
				$recommend_params['keido']    = $bknData['KEIDO'];
				// 検索区分
				if (!empty($recommend_params['StCd']))
				{
					$recommend_params['SrhKbn'] = Apm_Config_Search::SRHKBN_ENSENEKI;	// 沿線・駅検索
				}
				else if (!empty($recommend_params['CityCd']))
				{
					$recommend_params['SrhKbn'] = Apm_Config_Search::SRHKBN_JYUSYO;		// 住所検索
				}
				// 間取りCD
				switch ($bknData['MADORI_CD'])
				{
					case "":
						break;
					case Apm_Config_Search::MADORI_1R:
						$recommend_params['madori10'] = "on";
						break;
					case Apm_Config_Search::MADORI_1K:
						$recommend_params['madori11'] = "on";
						break;
					case Apm_Config_Search::MADORI_1DK:
					case Apm_Config_Search::MADORI_1SDK:
						$recommend_params['madori12'] = "on";
						break;
					case Apm_Config_Search::MADORI_1LDK:
					case Apm_Config_Search::MADORI_1SLDK:
						$recommend_params['madori14'] = "on";
						break;
					case Apm_Config_Search::MADORI_2K:
						$recommend_params['madori21'] = "on";
						break;
					case Apm_Config_Search::MADORI_2DK:
					case Apm_Config_Search::MADORI_2SDK:
						$recommend_params['madori22'] = "on";
						break;
					case Apm_Config_Search::MADORI_2LDK:
					case Apm_Config_Search::MADORI_2SLDK:
						$recommend_params['madori24'] = "on";
						break;
					case Apm_Config_Search::MADORI_3K:
						$recommend_params['madori31'] = "on";
						break;
					case Apm_Config_Search::MADORI_3DK:
					case Apm_Config_Search::MADORI_3SDK:
						$recommend_params['madori32'] = "on";
						break;
					case Apm_Config_Search::MADORI_3LDK:
					case Apm_Config_Search::MADORI_3SLDK:
						$recommend_params['madori34'] = "on";
						break;
					case Apm_Config_Search::MADORI_4K:
						$recommend_params['madori41'] = "on";
						break;
					case Apm_Config_Search::MADORI_4DK:
					case Apm_Config_Search::MADORI_4SDK:
						$recommend_params['madori42'] = "on";
						break;
					case Apm_Config_Search::MADORI_4LDK:
					case Apm_Config_Search::MADORI_4SLDK:
						$recommend_params['madori44'] = "on";
						break;
					default:
						$recommend_params['madori51'] = "on";
						break;
				}
				// 家賃+-1000
				$recommend_params['tinryo1']  = intval($bknData['YACHIN']) - 1000;
				$recommend_params['tinryo2']  = intval($bknData['YACHIN']) + 1000;
				// 築年数+5
				$recommend_params['built']    = date(Y) - intval($bknData['KANSEINEN']) + 5;
			}
			else
			{
				// データなし
				return array();
			}
		}
		else
		{
			// 検索条件をレコメンド検索用に成形
			// 検索区分
			$recommend_params['SrhKbn']   = $params['SrhKbn'];
			$recommend_params['SrhType']  = $params['SrhType'];
			// 検索条件
			$recommend_params['PrefCd']   = $params['PrefCd'];		// 都道府県
			$recommend_params['CityCd']   = $params['CityCd'];		// 市区町村
			$recommend_params['TownCd']   = $params['TownCd'];		// 町名
			$recommend_params['RailCd']   = $params['RailCd'];		// 沿線
			$recommend_params['StCd']     = $params['StCd'];		// 駅
			// 路線図CD
			for ($i = 0; $i < count($params['stcode']); $i++)
			{
				// 路線図CDが空ではない場合
				if(!is_null($params['stcode'][$i]) && $params['stcode'][$i] != ""){
					$recommend_params['stcode'][] = $params['stcode'][$i];
				}
			}
			//$recommend_params['ido']      = $params['ido'];		// 緯度
			//$recommend_params['keido']    = $params['keido'];		// 経度
			$recommend_params['freeword'] = $params['freeword'];	// フリーワード
			$recommend_params['TargetEkiCd']          = $params['TargetEkiCd'];				// 通勤・通学：駅
			$recommend_params['EndRangeTimeFrom'] = $params['EndRangeTimeFrom'];	// 通勤・通学：時間From
			$recommend_params['EndRangeTimeTo']   = $params['EndRangeTimeTo'];		// 通勤・通学：時間To
			$recommend_params['TransferCount']    = $params['TransferCount'];		// 通勤・通学：乗換回数
			$recommend_params['sch_cd']   = $params['sch_cd'];		// 学校名：学校CD
			// 間取り
			$recommend_params['madori10'] = $params['madori10'];
			$recommend_params['madori11'] = $params['madori11'];
			$recommend_params['madori12'] = $params['madori12'];
			$recommend_params['madori14'] = $params['madori14'];
			$recommend_params['madori21'] = $params['madori21'];
			$recommend_params['madori22'] = $params['madori22'];
			$recommend_params['madori24'] = $params['madori24'];
			$recommend_params['madori31'] = $params['madori31'];
			$recommend_params['madori32'] = $params['madori32'];
			$recommend_params['madori34'] = $params['madori34'];
			$recommend_params['madori41'] = $params['madori41'];
			$recommend_params['madori42'] = $params['madori42'];
			$recommend_params['madori44'] = $params['madori44'];
			$recommend_params['madori51'] = $params['madori51'];
			// 家賃+-1000
			$recommend_params['tinryo1']  = isset($params['tinryo1']) ? intval($params['tinryo1']) - 1000 : 0;
			$recommend_params['tinryo2']  = isset($params['tinryo2']) ? intval($params['tinryo2']) + 1000 : 9999999;
			// 築年数+5
			if (isset($params['built'])) $recommend_params['built'] = intval($params['built']) + 5;
		}
		// 上限・下限
		if ($recommend_params['tinryo1'] < 0)       $recommend_params['tinryo1'] = 0;
		if ($recommend_params['tinryo2'] > 9999999) $recommend_params['tinryo2'] = 9999999;

		$sql = "";
		$db_params = array();

/* ランダムに物件を抽出するため、SAMPLE関数使用 */
/*
		//検索区分の存在確認 存在しなければエラー
		if($this->_model_search_common->checkvalue($params, 'SrhKbn'))
		{
			// 検索区分によりSQL文を使い分ける
				 if($params['SrhKbn'] == Apm_Config_Search::SRHKBN_JYUSYO)        { $sql .= $this->generateJyusyoRecommendSql($recommend_params, $db_params); }   			// 住所検索
			else if($params['SrhKbn'] == Apm_Config_Search::SRHKBN_ENSENEKI)      { $sql .= $this->generateEnsenekiRecommendSql($recommend_params, $db_params); }			// 沿線・駅検索
			else if($params['SrhKbn'] == Apm_Config_Search::SRHKBN_ROSENZU)       { $sql .= $this->generateRosenzuRecommendSql($recommend_params, $db_params); }			// 路線図検索
			else if($params['SrhKbn'] == Apm_Config_Search::SRHKBN_CHIZU)         { }		// 地図検索
			else if($params['SrhKbn'] == Apm_Config_Search::SRHKBN_TUKINTUGAKU)   { $sql .= $this->generateTukintugakuRecommendSql($recommend_params, $db_params); }		// 通勤・通学時間検索
			else if($params['SrhKbn'] == Apm_Config_Search::SRHKBN_FREEWORD)      { $sql .= $this->generateFreewordRecommendSql($recommend_params, $db_params); }			// フリーワード検索
			else if($params['SrhKbn'] == Apm_Config_Search::SRHKBN_JYOHOSHINO)    { }		// 情報誌No.検索
			else if($params['SrhKbn'] == Apm_Config_Search::SRHKBN_TENPO)         { }		// 店舗物件検索
			else if($params['SrhKbn'] == Apm_Config_Search::SRHKBN_JYUKYOKEITAI)  { $sql .= $this->generateJyusyoRecommendSql($recommend_params, $db_params); }				// 住居形態検索
			else if($params['SrhKbn'] == Apm_Config_Search::SRHKBN_KODAWARI)      { $sql .= $this->generateJyusyoRecommendSql($recommend_params, $db_params); }				// こだわり物件検索
			else if($params['SrhKbn'] == Apm_Config_Search::SRHKBN_TOKUSYU)       { $sql .= $this->generateJyusyoRecommendSql($recommend_params, $db_params); }				// 特集物件検索
			else if($params['SrhKbn'] == Apm_Config_Search::SRHKBN_CAMPAIGN)      { $sql .= $this->generateJyusyoRecommendSql($recommend_params, $db_params); }				// キャンペーン物件検索
			// 住みたい駅検索
			else if($params['SrhKbn'] == Apm_Config_Search::SRHKBN_SUMITAIEKI)
			{
					 if($params['SrhType'] == Apm_Config_Search::SRHTYPE_LIST) { $sql .= $this->generateSumitaiekiRecommendSql($params, $db_params); }						// 一覧検索
				else if($params['SrhType'] == Apm_Config_Search::SRHTYPE_MAP)  { }		// 地図検索
			}
			// 学校名検索
			else if($params['SrhKbn'] == Apm_Config_Search::SRHKBN_GAKKONAME)
			{
					 if($params['SrhType'] == Apm_Config_Search::SRHTYPE_LIST) { $sql .= $this->generateGakkonameRecommendSql($params, $db_params); }						// 一覧検索
				else if($params['SrhType'] == Apm_Config_Search::SRHTYPE_MAP)  { }		// 地図検索
			}
			// 家賃相場検索
			else if($params['SrhKbn'] == Apm_Config_Search::SRHKBN_YACHINSOUBA)
			{
					 if($params['SrhType'] == Apm_Config_Search::SRHTYPE_JYUSYO)   { $sql .= $this->generateJyusyoRecommendSql($recommend_params, $db_params); }			// 住所検索
				else if($params['SrhType'] == Apm_Config_Search::SRHTYPE_ENSENEKI) { $sql .= $this->generateEnsenekiRecommendSql($recommend_params, $db_params); }			// 沿線・駅検索
			}
			// 賃料×間取り検索
			else if($params['SrhKbn'] == Apm_Config_Search::SRHKBN_CHINRYOMADORI)
			{
					 if($params['SrhType'] == Apm_Config_Search::SRHTYPE_JYUSYO)   { $sql .= $this->generateJyusyoRecommendSql($recommend_params, $db_params); }			// 住所検索
				else if($params['SrhType'] == Apm_Config_Search::SRHTYPE_ENSENEKI) { $sql .= $this->generateEnsenekiRecommendSql($recommend_params, $db_params); }			// 沿線・駅検索
			}
			// 社宅物件検索
			else if($params['SrhKbn'] == Apm_Config_Search::SRHKBN_SYATAKU)
			{
					 if($params['SrhType'] == Apm_Config_Search::SRHTYPE_JYUSYO)   { $sql .= $this->generateJyusyoForSyatakuRecommendSql($recommend_params, $db_params); }	// 住所検索
				else if($params['SrhType'] == Apm_Config_Search::SRHTYPE_ENSENEKI) { $sql .= $this->generateEkiForSyatakuRecommendSql($recommend_params, $db_params); }		// 沿線・駅検索
			}
		}
*/

		// サンプル関数使用してレコメンドSQL生成
		$sql = $this->getRecommendSql_s($recommend_params, $db_params);

		// エラー処理
		if (empty($sql)) { return array(); }

		return $this->dbGetList($sql, $db_params, $this->_db);

	}

	/**
	* 物件CDからレコメンド用データ取得SQL
	*
	* @access	public
	* @param	array
	* @return	void
	*/
	public function generateBkndataSqlFromHyCd($params, &$db_params)
	{
		$db_params['heyaCd'] = $params['HeyaCd'];
		$sql  = "";
		$sql .= "SELECT ";
		$sql .= "     T02_HEYA_CD AS HEYA_CD ";
		$sql .= "    ,T02_MADORI_CD AS MADORI_CD ";
		$sql .= "    ,NVL(T02_YACHIN, 0) + NVL(T02_YACHIN_TAX, 0) AS YACHIN ";
		$sql .= "    ,T01_TODOUFUKEN_CD AS TODOUFUKEN_CD ";
		$sql .= "    ,T01_SHIKUCHOUSON_CD AS SHIKUCHOUSON_CD ";
		$sql .= "    ,T01_CHOUMEI_CD AS CHOUMEI_CD ";
		$sql .= "    ,T01_ENSEN_CD01 AS ENSEN_CD01 ";
		$sql .= "    ,T01_EKI_CD01 AS EKI_CD01 ";
		$sql .= "    ,T01_IDO AS IDO ";
		$sql .= "    ,T01_KEIDO AS KEIDO ";
		$sql .= "    ,T01_KANSEINEN AS KANSEINEN ";
		$sql .= "FROM ";
		$sql .= "     T02HEYA ";
		$sql .= "    ,T01TATEMONO ";
		$sql .= "WHERE ";
		$sql .= "        T02_HEYA_CD = :heyaCd ";
		$sql .= "    AND T01_TATEMONO_CD = T02_TATEMONO_CD ";

		return $sql;
	}

	/*
	/* レコメンド一覧用SELECT句の取得
	/*
	/* @access public
	/* @return string
	 */
	public function getRecommendSelectPhrase()
	{
		/* 検索方法の変更により、現在は使用していない */
		// ｸｴﾘ文字列（Select句）
		$strQrySelect = '';

$strQrySelect = <<< DOC_END

SELECT
        T03.T03_HEYA_CD
       ,T03.T03_TATEMONO_CD
       ,T03.T03_ORIGINAL_TATEMONO_CD01
       ,T03.T03_ORIGINAL_TATEMONO_CD02
       ,T03.T03_ORIGINAL_HEYA_CD01
       ,T03.T03_ORIGINAL_HEYA_CD02
       ,T03.T03_TODOUFUKEN_CD
       ,T03.T03_SHIKUCHOUSON_CD
       ,T03.T03_CHOUMEI_CD
       ,T03.T03_CHOUMOKU_CD
       ,T03.T03_JYUUSHO_TEXT
       ,T03.T03_TATEMONO_TYPE
       ,T03.T03_TATEMONO_KOUZOU
       ,T03.T03_MADORI
       ,T03.T03_SENYUU_MENSEKI
       ,T03.T03_YACHIN
       ,T03.T03_YACHIN_TAX
       ,T03.T03_KANRIHI
       ,T03.T03_KANRIHI_TAX
       ,T03.T03_KYOUEKIHI
       ,T03.T03_KYOUEKIHI_TAX
       ,T03.T03_SHIKIKIN
       ,T03.T03_REIKIN
       ,T03.T03_HOSHOUKIN
       ,T03.T03_SHOUKYAKU_KUBUN
       ,T03.T03_SHOUKYAKUKIN
       ,T03.T03_KOUSHINRYOU
       ,T03.T03_SHIKIKIN_TSUKISUU
       ,T03.T03_REIKIN_TSUKISUU
       ,T03.T03_HOSHOUKIN_TSUKISUU
       ,T03.T03_SHOUKYAKUKIN_TSUKISUU
       ,T03.T03_SHOUKYAKUKINRITSU
       ,T03.T03_KOUSHINRYOUTSUKISUU
       ,T03.T03_TESUURYOU_FLAG
       ,T03.T03_KOUSHINRYOU_FLAG
       ,T03.T03_GAIKAN_GAZOU01
       ,T03.T03_GAIKAN_GAZOU02
       ,T03.T03_GAIKAN_GAZOU03
       ,T03.T03_GAIKAN_GAZOU04
       ,T03.T03_GAIKAN_GAZOU05
       ,T03.T03_GAIKAN_GAZOU_COMMON01
       ,T03.T03_GAIKAN_GAZOU_COMMON02
       ,T03.T03_GAIKAN_GAZOU_COMMON03
       ,T03.T03_GAIKAN_GAZOU_COMMON04
       ,T03.T03_GAIKAN_GAZOU_COMMON05
       ,T03.T03_FREE_GAZOU01
       ,T03.T03_FREE_GAZOU_TYPE01
       ,T03.T03_FREE_GAZOU02
       ,T03.T03_FREE_GAZOU_TYPE02
       ,T03.T03_FREE_GAZOU03
       ,T03.T03_FREE_GAZOU_TYPE03
       ,T03.T03_FREE_GAZOU04
       ,T03.T03_FREE_GAZOU_TYPE04
       ,T03.T03_FREE_GAZOU05
       ,T03.T03_FREE_GAZOU_TYPE05
       ,T03.T03_FREE_GAZOU06
       ,T03.T03_FREE_GAZOU_TYPE06
       ,T03.T03_FREE_GAZOU07
       ,T03.T03_FREE_GAZOU_TYPE07
       ,T03.T03_FREE_GAZOU08
       ,T03.T03_FREE_GAZOU_TYPE08
       ,T03.T03_FREE_GAZOU09
       ,T03.T03_FREE_GAZOU_TYPE09
       ,T03.T03_FREE_GAZOU10
       ,T03.T03_FREE_GAZOU_TYPE10
       ,T03.T03_FREE_GAZOU11
       ,T03.T03_FREE_GAZOU_TYPE11
       ,T03.T03_FREE_GAZOU12
       ,T03.T03_FREE_GAZOU_TYPE12
       ,T03.T03_FREE_GAZOU_COMMON01
       ,T03.T03_FREE_GAZOU_TYPE_COMMON01
       ,T03.T03_FREE_GAZOU_COMMON02
       ,T03.T03_FREE_GAZOU_TYPE_COMMON02
       ,T03.T03_FREE_GAZOU_COMMON03
       ,T03.T03_FREE_GAZOU_TYPE_COMMON03
       ,T03.T03_FREE_GAZOU_COMMON04
       ,T03.T03_FREE_GAZOU_TYPE_COMMON04
       ,T03.T03_FREE_GAZOU_COMMON05
       ,T03.T03_FREE_GAZOU_TYPE_COMMON05
       ,T03.T03_FREE_GAZOU_COMMON06
       ,T03.T03_FREE_GAZOU_TYPE_COMMON06
       ,T03.T03_FREE_GAZOU_COMMON07
       ,T03.T03_FREE_GAZOU_TYPE_COMMON07
       ,T03.T03_FREE_GAZOU_COMMON08
       ,T03.T03_FREE_GAZOU_TYPE_COMMON08
       ,T03.T03_FREE_GAZOU_COMMON09
       ,T03.T03_FREE_GAZOU_TYPE_COMMON09
       ,T03.T03_FREE_GAZOU_COMMON10
       ,T03.T03_FREE_GAZOU_TYPE_COMMON10
       ,T03.T03_FREE_GAZOU_COMMON11
       ,T03.T03_FREE_GAZOU_TYPE_COMMON11
       ,T03.T03_FREE_GAZOU_COMMON12
       ,T03.T03_FREE_GAZOU_TYPE_COMMON12
       ,T03.T03_MADORIZU
       ,T03.T03_TENPO_CD

DOC_END;

		return $strQrySelect;
	}

	/*
	/* WHERE句の最終行を取得
	/*
	/* @access public
	/* @return string
	 */
	public function getRecommendWhereEnd()
	{
		$sql =  ' AND ROWNUM < 50 ';

		return $sql;
	}

	/**
	* レコメンド物件取得SQL（住所検索）
	*
	* @access	public
	* @param	array
	* @return	void
	*/
	public function generateJyusyoRecommendSql($params, &$db_params)
	{
		/* 検索方法の変更により、現在は使用していない */
    	// インスタンス生成
    	$this->_model_jyusyosearch = new Rstobi_Model_JyusyoSearch();

		// OEMコードを判定しFROM句とWHERE句を取得
		$oemSql = $this->_model_rstobi_common->getOemFromWhere($params, $db_params);

		// SELECT句を取得
		$sql = $this->getRecommendSelectPhrase();

		// FROM句を取得
		$sql .= $this->_model_jyusyosearch->getFromForJyusyosearch();
		$sql .= $oemSql['from'];

		/*** WHERE句を取得 【ここから】***/
		// 住所での絞込み
		$sql .= $this->_model_jyusyosearch->getWhereForJyusyosearch($params, $db_params);
		// OEMでの絞込み
		$sql .= $oemSql['where'];
		// 基本条件での絞込み
		$sql .= $this->_model_rstobi_common->getKihonWhere($params, $db_params);

		$sql .= $this->getRecommendWhereEnd();
		/*** WHERE句を取得 【ここまで】***/

		//ORDER BY句を取得
    	return $sql;
	}

	/**
	* レコメンド物件取得SQL（沿線・駅検索）
	*
	* @access	public
	* @param	array
	* @return	void
	*/
	public function generateEnsenekiRecommendSql($params, &$db_params)
	{
		/* 検索方法の変更により、現在は使用していない */
		// インスタンス生成
		$this->_model_ekisearch = new Rstobi_Model_EnsenekiSearch();

		// OEMコードを判定しFROM句とWHERE句を取得
		$oemSql = $this->_model_rstobi_common->getOemFromWhere($params, $db_params);

		// SELECT句を取得
		$sql = $this->getRecommendSelectPhrase();

		// 駅まで選択されたか、沿線までの選択かにより、
		// FROM句とWHERE句を使い分ける

		// 駅まで選択
		if($this->_model_search_common->checkvalue($params, 'StCd'))
		{
			// FROM句を取得
			$sql .= $this->_model_ekisearch->getFromForEkisearch($params, $db_params);
			$sql .= $oemSql['from'];

			// WHERE句を取得
			// 沿線・駅での絞込み
			$sql .= $this->_model_ekisearch->getWhereForEkisearch($params, $db_params);

		}
		// 沿線まで選択
		else if($this->_model_search_common->checkvalue($params, 'RailCd'))
		{
			// FROM句のテーブル追加
			$sql .= $this->_model_ekisearch->getFromForEnsensearch($params, $db_params);
			$sql .= $oemSql['from'];

			// WHERE句を取得
			// 沿線での絞込み
			$sql .= $this->_model_ekisearch->getWhereForEnsensearch($params, $db_params);
		}
		// エラー処理
		else
		{
			return "";
		}
		// OMEでの絞込み
		$sql .= $oemSql['where'];

		// 基本条件での絞込み
		$sql .= $this->_model_rstobi_common->getKihonWhere($params, $db_params);

		// WHERE句の最終行を取得
		$sql .= $this->getRecommendWhereEnd();

		return $sql;
	}

	/*
	 * レコメンド物件取得SQL（路線図検索）
	 *
	 * @access	private
	 * @param   array
	 * @param	array ※参照渡し
	 * @return  string
	*/
	private function generateRosenzuRecommendSql($params, &$db_params)
	{
		/* 検索方法の変更により、現在は使用していない */
		// インスタンス生成
		$this->_model_rosenzuSearch = new Rstobi_Model_RosenzuSearch();

		if($this->_model_search_common->checkvalue($params, 'stcode'))
		{
			// SELECT句を取得
			$sql = $this->getRecommendSelectPhrase();

			// FROM・Where句を取得
			$sql .= $this->_model_rosenzuSearch->getFromForRosenzusearch($params, $db_params);
			$sql .= $this->_model_rosenzuSearch->getWhereForRosenzusearch($params, $db_params);

			// 基本条件での絞込み
			$sql .= $this->_model_rstobi_common->getKihonWhere($params, $db_params);

			// WHERE句の最終行を取得
			$sql .= $this->getRecommendWhereEnd();
		}

    	return $sql;
	}

	/*
	 * レコメンド物件取得SQL（通勤通学時間検索）
	 *
	 * @access	private
	 * @param   array
	 * @param	array ※参照渡し
	 * @return  string
	*/
	private function generateTukintugakuRecommendSql($params, &$db_params)
	{
		/* 検索方法の変更により、現在は使用していない */
		// インスタンス生成
		$this->_model_tukintugakusearch = new Rstobi_Model_TsukintsugakujikanSearch();

		// SELECT句を取得
		$sql = $this->getRecommendSelectPhrase();

		// FROM・Where句を取得
		$sql .= $this->_model_tukintugakusearch->getFromWhereForTsukintsugakujikansearch($params, $db_params);

		// 基本条件での絞込み
		$sql .= $this->_model_rstobi_common->getKihonWhere($params, $db_params);

		// WHERE句の最終行を取得
		$sql .= $this->getRecommendWhereEnd();

		return $sql;

	}

	/*
	 * レコメンド物件取得SQL（住みたい駅名検索：一覧）
	 *
	 * @access	private
	 * @param   array
	 * @param	array ※参照渡し
	 * @return  string
	*/
	private function generateSumitaiekiRecommendSql($params, &$db_params)
	{
		/* 検索方法の変更により、現在は使用していない */
		// インスタンス生成
		$this->_model_ekisearch        = new Rstobi_Model_EnsenekiSearch();
		$this->_model_sumitaiekisearch = new Rstobi_Model_SumitaiekiSearch();

		if($this->_model_search_common->checkvalue($params, 'StCd'))
		{
			// SELECT句を取得
			$sql = $this->getRecommendSelectPhrase();

			// FROM句を取得
			$sql .= $this->_model_ekisearch->getFromForEkisearch($params, $db_params);

			// WHERE句を取得
			// 駅での絞込み
			$sql .= $this->_model_sumitaiekisearch->getWhereForSumitaiekisearch($params, $db_params);

			// 基本条件での絞込み
			$sql .= $this->_model_rstobi_common->getKihonWhere($params, $db_params);

			// WHERE句の最終行を取得
			$sql .= $this->getRecommendWhereEnd();
		}

    	return $sql;
	}

	/*
	 * レコメンド物件取得SQL（学校名検索：一覧）
	 *
	 * @access	private
	 * @param   array
	 * @param	array ※参照渡し
	 * @return  string
	*/
	private function generateGakkonameRecommendSql($params, &$db_params)
	{
		/* 検索方法の変更により、現在は使用していない */
		// インスタンス生成
		$this->_model_gakkonamesearch = new Rstobi_Model_GakkonameSearch();

		// SELECT句を取得
		$sql = $this->getRecommendSelectPhrase();

		// FROM・Where句を取得
		$sql .= $this->_model_gakkonamesearch->getFromWhereForGakkonamesearch($params,$db_params);

		// 基本条件での絞込み
		$sql .= $this->_model_rstobi_common->getKihonWhere($params, $db_params);

		// WHERE句の最終行を取得
		$sql .= $this->getRecommendWhereEnd();

    	return $sql;

	}

	/*
	 * レコメンド物件取得SQL（フリーワード検索）
	 *
	 * @access	private
	 * @param   array
	 * @param	array ※参照渡し
	 * @return  string
	*/
	private function generateFreewordRecommendSql($params, &$db_params)
	{
		/* 検索方法の変更により、現在は使用していない */
		if($params['freeword'] != ""){
	    	// インスタンス生成
			$this->_model_freewordsearch = new Rstobi_Model_FreewordSearch();

			// SELECT句を取得
			$sql = $this->getRecommendSelectPhrase();

			// FROM句を取得
			$sql .= $this->_model_freewordsearch->getFromForFreewordsearch($params, $db_params, true);

			// 基本条件での絞込み
			$sql .= $this->_model_rstobi_common->getKihonWhere($params, $db_params);

			// WHERE句の最終行を取得
			$sql .= $this->getRecommendWhereEnd();
		}

		return $sql;
	}

	/*
	 * レコメンド物件取得SQL（社宅物件検索・住所検索）
	 *
	 * @access	private
	 * @param   array
	 * @param	array ※参照渡し
	 * @return  string
	*/
	private function generateJyusyoForSyatakuRecommendSql($params, &$db_params)
	{
		/* 検索方法の変更により、現在は使用していない */
		// インスタンス生成
		$this->_model_jyusyosearch = new Rstobi_Model_JyusyoSearch();
		$this->_model_syatakuserch = new Rstobi_Model_SyatakuSearch();

		// SELECT句を取得
		$sql = $this->getRecommendSelectPhrase();

		// 社宅物件検索用SELECT句を取得
		$sql .= $this->_model_syatakuserch->getSelectForSyataku();

		// FROM句を取得
		$sql .= $this->_model_jyusyosearch->getFromForJyusyosearch();
		$sql .= $this->_model_syatakuserch->getFromForSyataku();

		/*** WHERE句を取得 【ここから】***/
		// 住所での絞込み
		$sql .= $this->_model_jyusyosearch->getWhereForJyusyosearch($params, $db_params);
		// 社宅対象物件での絞込み
		$sql .= $this->_model_syatakuserch->getWhereForSyataku();
		// 基本条件での絞込み
		$sql .= $this->_model_rstobi_common->getKihonWhere($params, $db_params);

		$sql .= $this->getRecommendWhereEnd();
		/*** WHERE句を取得 【ここまで】***/

		return $sql;
	}

	/*
	 * レコメンド物件取得SQL（社宅物件検索・沿線検索）
	 *
	 * @access	private
	 * @param   array
	 * @param	array ※参照渡し
	 * @return  string
	*/
	private function generateEkiForSyatakuRecommendSql($params, &$db_params)
	{
		/* 検索方法の変更により、現在は使用していない */
		// インスタンス生成
		$this->_model_ekisearch = new Rstobi_Model_EnsenekiSearch();
		$this->_model_syatakuserch = new Rstobi_Model_SyatakuSearch();

		// SELECT句を取得
		$sql = $this->getRecommendSelectPhrase();

		// 社宅物件検索用SELECT句を取得
		$sql .= $this->_model_syatakuserch->getSelectForSyataku();

		// 駅まで選択されたか、沿線までの選択かにより、
		// FROM句とWHERE句を使い分ける

		// 駅まで選択
		if($this->_model_search_common->checkvalue($params, 'StCd'))
		{
			// FROM句を取得
			$sql .= $this->_model_ekisearch->getFromForEkisearch($params, $db_params);
			$sql .= $this->_model_syatakuserch->getFromForSyataku();

			// WHERE句を取得
			// 沿線・駅での絞込み
			$sql .= $this->_model_ekisearch->getWhereForEkisearch($params, $db_params);

		}
		// 沿線まで選択
		else if($this->_model_search_common->checkvalue($params, 'RailCd'))
		{
			// FROM句のテーブル追加
			$sql .= $this->_model_ekisearch->getFromForEnsensearch($params, $db_params);
			$sql .= $this->_model_syatakuserch->getFromForSyataku();

			// WHERE句を取得
			// 沿線での絞込み
			$sql .= $this->_model_ekisearch->getWhereForEnsensearch($params, $db_params);
		}
		// エラー処理
		else
		{
			return "";
		}

		// 社宅対象物件での絞込み
		$sql .= $this->_model_syatakuserch->getWhereForSyataku();

		// 基本条件での絞込み
		$sql .= $this->_model_rstobi_common->getKihonWhere($params, $db_params);

		// WHERE句の最終行を取得
		$sql .= $this->getRecommendWhereEnd();

    	return $sql;
    }

	/**
	* レコメンド物件一覧データを表示用に変換
	*
	* @access	public
	* @param	array
	* @return	void
	*/
	public function convertRecommendList(&$bukkenData)
	{
		// 表示するレコメンド物件をランダムで取得する
		//$bukkenData = $this->randomGetRecommendList($bukkenData);

		for($i = 0; $i < count($bukkenData); $i++)
		{
			// 表示用コンバード
			$bukkenData[$i]['T03_HEYA_CD']            = $bukkenData[$i]['T03_HEYA_CD'];							// 部屋CD
			$bukkenData[$i]['T03_JUSYO_STR']          = Apm_Bukkenitems::GetAddressStr($bukkenData[$i]);		// 住所
			$bukkenData[$i]['T03_YACHIN_STR']         = Apm_Bukkenitems::GetChinryouStr($bukkenData[$i]);		// 賃料
			$bukkenData[$i]['T03_KANRI_KYOEKI_STR']   = Apm_Bukkenitems::GetKyouekihiStr($bukkenData[$i], '0');	// 管理費・共益費
			$bukkenData[$i]['T03_TATEMONO_TYPE_STR']  = Apm_Bukkenitems::GetBuildTypeStr($bukkenData[$i]);		// 建物種別
			$bukkenData[$i]['T03_MADORI_STR']         = Apm_Bukkenitems::GetMadoriStr($bukkenData[$i]);			// 間取り
			$bukkenData[$i]['T03_SENYUU_MENSEKI_STR'] = Apm_Bukkenitems::GetSenyuuMensekiStr($bukkenData[$i]);	// 専有面積
			$bukkenData[$i]['T03_BUILD_YM_STR']       = Apm_Bukkenitems::GetBuildYmStr($bukkenData[$i]);		// 築年月
			$bukkenData[$i]['T03_KOUSTU_KIKAN_STR01'] = Apm_Bukkenitems::GetTrafficStr($bukkenData[$i]);		//交通機関01
			// 外観画像
			$images = Apm_Bukkenitems::GetImageDataMain($bukkenData[$i]);
			$bukkenData[$i]['T03_GAIKAN_GAZOU_ARR']   = $images[Apm_Config_Search::IMG_TYPE_GAIKAN][0];
			// URL
			$bukkenData[$i]['T03_BUKENDTL_URL']       = Apm_Bukkenurl::generateUrlByParametersDetail(array('ID'=>$bukkenData[$i]['T03_HEYA_CD']));
		}

		return $bukkenData;
	}

	/**
	* 表示するレコメンド物件をランダムで取得する
	*
	* @access	public
	* @param	array
	* @return	void
	*/
	public function randomGetRecommendList($bukkenData)
	{
		if(count($bukkenData) > 4)
		{
			// ランダムで配列のキーを4件抽出する
			$randomKey = array_rand($bukkenData, 4);

			for($i = 0; $i < count($randomKey); $i++)
			{
				$retBukenData[$i] = $bukkenData[$randomKey[$i]];
			}
		}
		else
		{
			return $bukkenData;
		}

		return $retBukenData;
	}


	/* 以下、サンプル関数使用版 */

	/*
	 * 検索区分ごとにSQLを取得する
	 */
	public function getRecommendSql_s($params, &$db_params)
	{
		$sql = "";
		
		//検索区分の存在確認 存在しなければエラー
		if($this->_model_search_common->checkvalue($params, 'SrhKbn'))
		{
			// SELECT句の取得
			$select_str = $this->getRecommendSelectPhrase_list();
			
			// OEMコードを判定しFROM句とWHERE句を取得
			//  OEMではレコメンド表示しないので不要・・・？
			$oemSql = $this->_model_rstobi_common->getOemFromWhere($params, $db_params);
			
			// 検索区分毎にFrom句、Where句を取得
			$baseSql = "";
				 if($params['SrhKbn'] == Apm_Config_Search::SRHKBN_JYUSYO)        { $baseSql = $this->generateJyusyoRecommendSql_s($params, $db_params); }   		// 住所検索
			else if($params['SrhKbn'] == Apm_Config_Search::SRHKBN_ENSENEKI)      { $baseSql = $this->generateEnsenekiRecommendSql_s($params, $db_params); }		// 沿線・駅検索
			else if($params['SrhKbn'] == Apm_Config_Search::SRHKBN_ROSENZU)       { $baseSql = $this->generateRosenzuRecommendSql_s($params, $db_params); }			// 路線図検索
			else if($params['SrhKbn'] == Apm_Config_Search::SRHKBN_CHIZU)         { }		// 地図検索
			else if($params['SrhKbn'] == Apm_Config_Search::SRHKBN_TUKINTUGAKU)   { $baseSql = $this->generateTukintugakuRecommendSql_s($params, $db_params); }		// 通勤・通学時間検索
			else if($params['SrhKbn'] == Apm_Config_Search::SRHKBN_FREEWORD)      { $baseSql = $this->generateFreewordRecommendSql_s($params, $db_params); }		// フリーワード検索
			else if($params['SrhKbn'] == Apm_Config_Search::SRHKBN_JYOHOSHINO)    { }		// 情報誌No.検索
			else if($params['SrhKbn'] == Apm_Config_Search::SRHKBN_TENPO)         { }		// 店舗物件検索
			else if($params['SrhKbn'] == Apm_Config_Search::SRHKBN_JYUKYOKEITAI)  { $baseSql = $this->generateJyusyoRecommendSql_s($params, $db_params); }			// 住居形態検索
			else if($params['SrhKbn'] == Apm_Config_Search::SRHKBN_KODAWARI)      { $baseSql = $this->generateJyusyoRecommendSql_s($params, $db_params); }			// こだわり物件検索
			else if($params['SrhKbn'] == Apm_Config_Search::SRHKBN_TOKUSYU)       { $baseSql = $this->generateJyusyoRecommendSql_s($params, $db_params); }			// 特集物件検索
			else if($params['SrhKbn'] == Apm_Config_Search::SRHKBN_CAMPAIGN)      { $baseSql = $this->generateJyusyoRecommendSql_s($params, $db_params); }			// キャンペーン物件検索
			// 住みたい駅検索
			else if($params['SrhKbn'] == Apm_Config_Search::SRHKBN_SUMITAIEKI)
			{
					 if($params['SrhType'] == Apm_Config_Search::SRHTYPE_LIST) { $baseSql = $this->generateSumitaiekiRecommendSql_s($params, $db_params); }			// 一覧検索
				else if($params['SrhType'] == Apm_Config_Search::SRHTYPE_MAP)  { }		// 地図検索
			}
			// 学校名検索
			else if($params['SrhKbn'] == Apm_Config_Search::SRHKBN_GAKKONAME)
			{
					 if($params['SrhType'] == Apm_Config_Search::SRHTYPE_LIST) { $baseSql = $this->generateGakkonameRecommendSql_s($params, $db_params); }			// 一覧検索
				else if($params['SrhType'] == Apm_Config_Search::SRHTYPE_MAP)  { }		// 地図検索
			}
			// 家賃相場検索
			else if($params['SrhKbn'] == Apm_Config_Search::SRHKBN_YACHINSOUBA)
			{
					 if($params['SrhType'] == Apm_Config_Search::SRHTYPE_JYUSYO)   { $baseSql = $this->generateJyusyoRecommendSql_s($params, $db_params); }			// 住所検索
				else if($params['SrhType'] == Apm_Config_Search::SRHTYPE_ENSENEKI) { $baseSql = $this->generateEnsenekiRecommendSql_s($params, $db_params); }		// 沿線・駅検索
			}
			// 賃料×間取り検索
			else if($params['SrhKbn'] == Apm_Config_Search::SRHKBN_CHINRYOMADORI)
			{
					 if($params['SrhType'] == Apm_Config_Search::SRHTYPE_JYUSYO)   { $baseSql = $this->generateJyusyoRecommendSql_s($params, $db_params); }			// 住所検索
				else if($params['SrhType'] == Apm_Config_Search::SRHTYPE_ENSENEKI) { $baseSql = $this->generateEnsenekiRecommendSql_s($params, $db_params); }		// 沿線・駅検索
			}
			// エラー処理
			if (empty($baseSql)) { return ""; }
			
			// From句・Where句を精製
			$from_str  = $baseSql['from'] . $oemSql['from'];
			$where_str = $baseSql['where'] . $oemSql['where'];
			
			// 基本条件Where句を取得
			$where_str .= $this->_model_rstobi_common->getKihonWhere($params, $db_params, false);
			// 部屋CDが存在する場合はそれを除く
			if (!empty($params['HeyaCd'])) {
				$where_str .= " AND T03_HEYA_CD <> '" . $params['HeyaCd'] . "' ";
			}
			// Where句に追加
			$where_str .= $this->getRecommendWhereEnd_list();
			
//			// T03WEB_HEYAテーブルにサンプル関数追加
//			/*** ベースは5%取得 ***/
//			/*** 通勤・通学時間検索、フリーワード検索では対象レコードが少ない可能性があるので10%取得 ***/
//			/*** 基本条件が存在する場合および学校名検索は検索数が少なくなるので、元のSQLで検索 ***/
//			$sqmple_str = "";
//			if (empty($where_joken_str) && $params['SrhKbn'] != Apm_Config_Search::SRHKBN_GAKKONAME) {
//				if ($params['SrhKbn'] != Apm_Config_Search::SRHKBN_TUKINTUGAKU && $params['SrhKbn'] != Apm_Config_Search::SRHKBN_FREEWORD) {
//					$sqmple_str = "T03WEB_HEYA SAMPLE(5)";
//				}
//				else {
//					$sqmple_str = "T03WEB_HEYA SAMPLE(10)";
//				}
//				/*** FROM句を置き換える ***/
//				$from_str = preg_replace("/T03WEB_HEYA(\s)+(as\s)?(\s)*T03/i", $sqmple_str, $from_str);
//				/*** 別名が使用できない為、Where句のT03.を削除する ***/
//				$where_str  = preg_replace("/T03\./i", "", $where_str);
//			}
//			else {
//				// Where句に追加
//				$where_str .= $where_joken_str;
//				$where_str .= $this->getRecommendWhereEnd();
//			}
			// SQL
			$sql = $select_str . $from_str . $where_str . $this->getRecommendOrder_list();
			// リストを取得
			$result = $this->dbGetList($sql, $db_params, $this->_db);
			
			// ランダムに部屋CDを抽出
			$arrHeyaData = $this->generateTenpoList($result);
			
			// SQL生成
			$sql  = "";
			$db_params = array();
			if (!empty($arrHeyaData)) {
				$sql .= $this->getRecommendSelectPhrase_s();
				$sql .= " FROM T03WEB_HEYA ";
				$sql .= " WHERE ";
				$opt = "";
				foreach ($arrHeyaData as $key => $value)
				{
					$db_params['heya_cd_'.$key] = $value['T03_HEYA_CD'];
					$sql .= $opt . " T03_HEYA_CD = :heya_cd_".$key." ";
					$opt = " OR ";
				}
			}
		}
		
		return $sql;
	}

	/*
	/* レコメンド一覧用SELECT句の取得
	/*
	/* @access public
	/* @return string
	 */
	public function getRecommendSelectPhrase_list()
	{
		// ｸｴﾘ文字列（Select句）
		$sql  = "";
		$sql .= "SELECT";
		$sql .= "   T03.T03_HEYA_CD";
		$sql .= "  ,T03.T03_TATEMONO_CD";
		$sql .= "  ,T03.T03_ORIGINAL_HEYA_CD01";
		$sql .= "  ,T03.T03_TENPO_CD";
		$sql .= "  ,CEIL(DBMS_RANDOM.VALUE*1000000) as RANDOM";
		
		return $sql;
	}

	/*
	/* WHERE句の最終行を取得
	/*
	/* @access public
	/* @return string
	 */
	public function getRecommendWhereEnd_list()
	{
		$sql =  ' AND ROWNUM <= 1000 ';

		return $sql;
	}

	/*
	/* ORDER句を取得
	/*
	/* @access public
	/* @return string
	 */
	public function getRecommendOrder_list()
	{
		$sql  = "";
		$sql .= " ORDER BY ";
		$sql .= "   T03.T03_TENPO_CD";
		$sql .= "  ,RANDOM";

		return $sql;
	}

	/*
	/* レコメンド一覧用SELECT句の取得
	/*
	/* @access public
	/* @return string
	 */
	public function getRecommendSelectPhrase_s()
	{
		// ｸｴﾘ文字列（Select句）
		$strQrySelect = '';

$strQrySelect = <<< DOC_END

SELECT
        T03_HEYA_CD
       ,T03_TATEMONO_CD
       ,T03_ORIGINAL_TATEMONO_CD01
       ,T03_ORIGINAL_TATEMONO_CD02
       ,T03_ORIGINAL_HEYA_CD01
       ,T03_ORIGINAL_HEYA_CD02
       ,T03_TODOUFUKEN_CD
       ,T03_SHIKUCHOUSON_CD
       ,T03_CHOUMEI_CD
       ,T03_CHOUMOKU_CD
       ,T03_BANCHI
       ,T03_JYUUSHO_TEXT
       ,T03_ANNAI_MAP_USE_FLAG
       ,T03_TATEMONO_TYPE
       ,T03_TATEMONO_KOUZOU
       ,T03_MADORI
       ,T03_SENYUU_MENSEKI
       ,T03_YACHIN
       ,T03_YACHIN_TAX
       ,T03_KANRIHI
       ,T03_KANRIHI_TAX
       ,T03_KYOUEKIHI
       ,T03_KYOUEKIHI_TAX
       ,T03_SHIKIKIN
       ,T03_REIKIN
       ,T03_HOSHOUKIN
       ,T03_SHOUKYAKU_KUBUN
       ,T03_SHOUKYAKUKIN
       ,T03_KOUSHINRYOU
       ,T03_SHIKIKIN_TSUKISUU
       ,T03_REIKIN_TSUKISUU
       ,T03_HOSHOUKIN_TSUKISUU
       ,T03_SHOUKYAKUKIN_TSUKISUU
       ,T03_SHOUKYAKUKINRITSU
       ,T03_KOUSHINRYOUTSUKISUU
       ,T03_TESUURYOU_FLAG
       ,T03_KOUSHINRYOU_FLAG
       ,T03_GAIKAN_GAZOU01
       ,T03_GAIKAN_GAZOU02
       ,T03_GAIKAN_GAZOU03
       ,T03_GAIKAN_GAZOU04
       ,T03_GAIKAN_GAZOU05
       ,T03_GAIKAN_GAZOU_COMMON01
       ,T03_GAIKAN_GAZOU_COMMON02
       ,T03_GAIKAN_GAZOU_COMMON03
       ,T03_GAIKAN_GAZOU_COMMON04
       ,T03_GAIKAN_GAZOU_COMMON05
       ,T03_FREE_GAZOU01
       ,T03_FREE_GAZOU_TYPE01
       ,T03_FREE_GAZOU02
       ,T03_FREE_GAZOU_TYPE02
       ,T03_FREE_GAZOU03
       ,T03_FREE_GAZOU_TYPE03
       ,T03_FREE_GAZOU04
       ,T03_FREE_GAZOU_TYPE04
       ,T03_FREE_GAZOU05
       ,T03_FREE_GAZOU_TYPE05
       ,T03_FREE_GAZOU06
       ,T03_FREE_GAZOU_TYPE06
       ,T03_FREE_GAZOU07
       ,T03_FREE_GAZOU_TYPE07
       ,T03_FREE_GAZOU08
       ,T03_FREE_GAZOU_TYPE08
       ,T03_FREE_GAZOU09
       ,T03_FREE_GAZOU_TYPE09
       ,T03_FREE_GAZOU10
       ,T03_FREE_GAZOU_TYPE10
       ,T03_FREE_GAZOU11
       ,T03_FREE_GAZOU_TYPE11
       ,T03_FREE_GAZOU12
       ,T03_FREE_GAZOU_TYPE12
       ,T03_FREE_GAZOU_COMMON01
       ,T03_FREE_GAZOU_TYPE_COMMON01
       ,T03_FREE_GAZOU_COMMON02
       ,T03_FREE_GAZOU_TYPE_COMMON02
       ,T03_FREE_GAZOU_COMMON03
       ,T03_FREE_GAZOU_TYPE_COMMON03
       ,T03_FREE_GAZOU_COMMON04
       ,T03_FREE_GAZOU_TYPE_COMMON04
       ,T03_FREE_GAZOU_COMMON05
       ,T03_FREE_GAZOU_TYPE_COMMON05
       ,T03_FREE_GAZOU_COMMON06
       ,T03_FREE_GAZOU_TYPE_COMMON06
       ,T03_FREE_GAZOU_COMMON07
       ,T03_FREE_GAZOU_TYPE_COMMON07
       ,T03_FREE_GAZOU_COMMON08
       ,T03_FREE_GAZOU_TYPE_COMMON08
       ,T03_FREE_GAZOU_COMMON09
       ,T03_FREE_GAZOU_TYPE_COMMON09
       ,T03_FREE_GAZOU_COMMON10
       ,T03_FREE_GAZOU_TYPE_COMMON10
       ,T03_FREE_GAZOU_COMMON11
       ,T03_FREE_GAZOU_TYPE_COMMON11
       ,T03_FREE_GAZOU_COMMON12
       ,T03_FREE_GAZOU_TYPE_COMMON12
       ,T03_MADORIZU
       ,T03_TENPO_CD
       ,T03_ENSEN_NAME
       ,T03_EKI_NAME
       ,T03_ENSEN_CD01
       ,T03_BUS_JYOUSHA
       ,T03_BUS_STOP
       ,T03_TOHO01

DOC_END;

		return $strQrySelect;
	}

	/**
	* レコメンド物件取得SQL（住所検索）
	*
	* @access	public
	* @param	array
	* @return	void
	*/
	public function generateJyusyoRecommendSql_s($params, &$db_params)
	{
    	// インスタンス生成
    	$this->_model_jyusyosearch = new Rstobi_Model_JyusyoSearch();

		// FROM句を取得
		$from_str  = $this->_model_jyusyosearch->getFromForJyusyosearch();
		//$from_str .= $this->_model_rstobi_common->getCampFrom($params); //キャンペーン
		// WHERE句を取得
		$where_str = $this->_model_jyusyosearch->getWhereForJyusyosearch($params, $db_params);

		return array('from' => $from_str, 'where' => $where_str);
	}

	/**
	* レコメンド物件取得SQL（沿線・駅検索）
	*
	* @access	public
	* @param	array
	* @return	void
	*/
	public function generateEnsenekiRecommendSql_s($params, &$db_params)
	{
		// インスタンス生成
		$this->_model_ekisearch = new Rstobi_Model_EnsenekiSearch();

		// 駅まで選択されたか、沿線までの選択かにより、
		// FROM句とWHERE句を使い分ける

		// 駅まで選択
		if($this->_model_search_common->checkvalue($params, 'StCd'))
		{
			// FROM句を取得
			$from_str  = $this->_model_ekisearch->getFromForEkisearch($params, $db_params);
			//$from_str .= $this->_model_rstobi_common->getCampFrom($params); //キャンペーン
			// WHERE句を取得
			$where_str = $this->_model_ekisearch->getWhereForEkisearch($params, $db_params);

		}
		// 沿線まで選択
		else if($this->_model_search_common->checkvalue($params, 'RailCd'))
		{
			// FROM句のテーブル追加
			$from_str  = $this->_model_ekisearch->getFromForEnsensearch($params, $db_params);
			//$from_str .= $this->_model_rstobi_common->getCampFrom($params); //キャンペーン
			// WHERE句を取得
			$where_str = $this->_model_ekisearch->getWhereForEnsensearch($params, $db_params);
		}
		// エラー処理
		else
		{
			return "";
		}

		return array('from' => $from_str, 'where' => $where_str);
	}

	/*
	 * レコメンド物件取得SQL（路線図検索）
	 *
	 * @access	private
	 * @param   array
	 * @param	array ※参照渡し
	 * @return  string
	*/
	private function generateRosenzuRecommendSql_s($params, &$db_params)
	{
		// インスタンス生成
		$this->_model_rosenzuSearch = new Rstobi_Model_RosenzuSearch();

		if($this->_model_search_common->checkvalue($params, 'stcode'))
		{
			// FROM・Where句を取得
			$from_str  = $this->_model_rosenzuSearch->getFromForRosenzusearch($params, $db_params);
			//$from_str .= $this->_model_rstobi_common->getCampFrom($params); //キャンペーン
			$where_str = $this->_model_rosenzuSearch->getWhereForRosenzusearch($params, $db_params);
		}
		// エラー処理
		else
		{
			return "";
		}

		return array('from' => $from_str, 'where' => $where_str);
	}

	/*
	 * レコメンド物件取得SQL（通勤通学時間検索）
	 *
	 * @access	private
	 * @param   array
	 * @param	array ※参照渡し
	 * @return  string
	*/
	private function generateTukintugakuRecommendSql_s($params, &$db_params)
	{
		// インスタンス生成
		$this->_model_tukintugakusearch = new Rstobi_Model_TsukintsugakujikanSearch();

		// FROM・Where句を取得
		$from_str  = $this->_model_tukintugakusearch->getFromForTsukintsugakujikansearch($params, $db_params);
		//$from_str .= $this->_model_rstobi_common->getCampFrom($params); //キャンペーン
		$where_str = $this->_model_tukintugakusearch->getWhereForTsukintsugakujikansearch($params, $db_params);

		return array('from' => $from_str, 'where' => $where_str);

	}

	/*
	 * レコメンド物件取得SQL（住みたい駅名検索：一覧）
	 *
	 * @access	private
	 * @param   array
	 * @param	array ※参照渡し
	 * @return  string
	*/
	private function generateSumitaiekiRecommendSql_s($params, &$db_params)
	{
		// インスタンス生成
		$this->_model_ekisearch        = new Rstobi_Model_EnsenekiSearch();
		$this->_model_sumitaiekisearch = new Rstobi_Model_SumitaiekiSearch();

		if($this->_model_search_common->checkvalue($params, 'StCd'))
		{
			// FROM句を取得
			$from_str  = $this->_model_ekisearch->getFromForEkisearch($params, $db_params);
			//$from_str .= $this->_model_rstobi_common->getCampFrom($params); //キャンペーン
			// WHERE句を取得
			$where_str = $this->_model_sumitaiekisearch->getWhereForSumitaiekisearch($params, $db_params);

		}
		// エラー処理
		else
		{
			return "";
		}

		return array('from' => $from_str, 'where' => $where_str);
	}

	/*
	 * レコメンド物件取得SQL（学校名検索：一覧）
	 *
	 * @access	private
	 * @param   array
	 * @param	array ※参照渡し
	 * @return  string
	*/
	private function generateGakkonameRecommendSql_s($params, &$db_params)
	{
		// インスタンス生成
		$this->_model_gakkonamesearch = new Rstobi_Model_GakkonameSearch();

		// FROM・Where句を取得
		$from_str  = $this->_model_gakkonamesearch->getFromForGakkonamesearch($params,$db_params);
		//$from_str .= $this->_model_rstobi_common->getCampFrom($params); //キャンペーン
		$where_str = $this->_model_gakkonamesearch->getWhereForGakkonamesearch($params,$db_params);

		return array('from' => $from_str, 'where' => $where_str);

	}

	/*
	 * レコメンド物件取得SQL（フリーワード検索）
	 *
	 * @access	private
	 * @param   array
	 * @param	array ※参照渡し
	 * @return  string
	*/
	private function generateFreewordRecommendSql_s($params, &$db_params)
	{
		if($params['freeword'] != ""){
	    	// インスタンス生成
			$this->_model_freewordsearch = new Rstobi_Model_FreewordSearch();

			// FROM句を取得
			$from_str  = $this->_model_freewordsearch->getFromForFreewordsearch_s($params, $db_params, true);
			//$from_str .= $this->_model_rstobi_common->getCampFrom($params); //キャンペーン
			$where_str = $this->_model_freewordsearch->generatFerrWhereSql();

		}
		// エラー処理
		else
		{
			return "";
		}

		return array('from' => $from_str, 'where' => $where_str);
	}

	/* 以上、サンプル関数使用版 */

	/*
	 * 取得したリストを店舗別に分解し、ランダムに部屋CDを抽出する
	 *
	 * @access	private
	 * @param   array
	 * @param	array ※参照渡し
	 * @return  string
	*/
	private function generateTenpoList($result)
	{
		$arrHeyaList = array();

		// 対象が4件以下の場合
		if (count($result) <= 4)
		{
			// そのまま出力する
			foreach($result as $value)
			{
				$arrHeyaList[] = array(
						 'T03_HEYA_CD'				=> $value['T03_HEYA_CD']
						,'T03_TATEMONO_CD'			=> $value['T03_TATEMONO_CD']
						,'T03_ORIGINAL_HEYA_CD01'	=> $value['T03_ORIGINAL_HEYA_CD01']
					);
			}
			return $arrHeyaList;
		}
	
		$arrTenpoList     = array();
		$arrTenpoHeyaList = array();
		$tenpoCd = "";
		$heyaCd  = "";
		// リストを店舗別に分解
		foreach($result as $value)
		{
			if (!in_array($value['T03_TENPO_CD'], $arrTenpoList)) {
				$arrTenpoList[] = $value['T03_TENPO_CD'];
			}
			$tenpoCd = $value['T03_TENPO_CD'];
			$heyaCd  = $value['T03_HEYA_CD'];
			$arrTenpoHeyaList[$tenpoCd][$heyaCd]['T03_HEYA_CD']            = $value['T03_HEYA_CD'];
			$arrTenpoHeyaList[$tenpoCd][$heyaCd]['T03_TATEMONO_CD']        = $value['T03_TATEMONO_CD'];
			$arrTenpoHeyaList[$tenpoCd][$heyaCd]['T03_ORIGINAL_HEYA_CD01'] = $value['T03_ORIGINAL_HEYA_CD01'];
		}
		
		switch (count($arrTenpoList))
		{
			case 0:
				// 対象なし
				break;
			case 1:
				// 店舗数が1件の場合
				$arrHeyaList = $this->randomGetList($arrTenpoHeyaList[$arrTenpoList[0]], 4);
				break;
			case 2:
				// 店舗数が2件の場合
				$tenpoCd1 = "";
				$tenpoCd2 = "";
				if (count($arrTenpoHeyaList[$arrTenpoList[0]]) > count($arrTenpoHeyaList[$arrTenpoList[1]])) {
					$tenpoCd1 = $arrTenpoList[1];
					$tenpoCd2 = $arrTenpoList[0];
				} else {
					$tenpoCd1 = $arrTenpoList[0];
					$tenpoCd2 = $arrTenpoList[1];
				}
				$arrHeyaList = $this->randomGetList($arrTenpoHeyaList[$tenpoCd1], 2);
				$arrHeyaList = $this->array_marge_x($arrHeyaList, $this->randomGetList($arrTenpoHeyaList[$tenpoCd2], 4-count($arrHeyaList), $arrHeyaList));
				break;
			case 3:
				// 店舗数が3件の場合
				$tenpoCd1 = "";
				$tenpoCd2 = "";
				$tenpoCd3 = "";
				// 2件抽出する店舗をランダムに取得
				shuffle($arrTenpoList);
				if (count($arrTenpoHeyaList[$arrTenpoList[0]]) > 1) {
					$tenpoCd1 = $arrTenpoList[0];
					$tenpoCd2 = $arrTenpoList[1];
					$tenpoCd3 = $arrTenpoList[2];
				} else if (count($arrTenpoHeyaList[$arrTenpoList[1]]) > 1) {
					$tenpoCd1 = $arrTenpoList[1];
					$tenpoCd2 = $arrTenpoList[2];
					$tenpoCd3 = $arrTenpoList[0];
				} else {
					$tenpoCd1 = $arrTenpoList[2];
					$tenpoCd2 = $arrTenpoList[0];
					$tenpoCd3 = $arrTenpoList[1];
				}
				$arrHeyaList = $this->randomGetList($arrTenpoHeyaList[$tenpoCd1], 2);
				$arrHeyaList = $this->array_marge_x($arrHeyaList, $this->randomGetList($arrTenpoHeyaList[$tenpoCd2], 1, $arrHeyaList));
				$arrHeyaList = $this->array_marge_x($arrHeyaList, $this->randomGetList($arrTenpoHeyaList[$tenpoCd3], 1, $arrHeyaList));
				break;
			case 4:
				// 店舗数が4件の場合
				$arrHeyaList = $this->randomGetList($arrTenpoHeyaList[$arrTenpoList[0]], 1);
				$arrHeyaList = $this->array_marge_x($arrHeyaList, $this->randomGetList($arrTenpoHeyaList[$arrTenpoList[1]], 1, $arrHeyaList));
				$arrHeyaList = $this->array_marge_x($arrHeyaList, $this->randomGetList($arrTenpoHeyaList[$arrTenpoList[2]], 1, $arrHeyaList));
				$arrHeyaList = $this->array_marge_x($arrHeyaList, $this->randomGetList($arrTenpoHeyaList[$arrTenpoList[3]], 1, $arrHeyaList));
				break;
			default:
				// 店舗数が4件より多いの場合、抽出する店舗をランダムに取得
				$tenpoCd = array_rand($arrTenpoList, 4);
				$arrHeyaList = $this->randomGetList($arrTenpoHeyaList[$arrTenpoList[$tenpoCd[0]]], 1);
				$arrHeyaList = $this->array_marge_x($arrHeyaList, $this->randomGetList($arrTenpoHeyaList[$arrTenpoList[$tenpoCd[1]]], 1, $arrHeyaList));
				$arrHeyaList = $this->array_marge_x($arrHeyaList, $this->randomGetList($arrTenpoHeyaList[$arrTenpoList[$tenpoCd[2]]], 1, $arrHeyaList));
				$arrHeyaList = $this->array_marge_x($arrHeyaList, $this->randomGetList($arrTenpoHeyaList[$arrTenpoList[$tenpoCd[3]]], 1, $arrHeyaList));
				break;
		}
		
		return $arrHeyaList;
	}

	/**
	* 表示するレコメンド物件をランダムで取得する
	*
	* @access	public
	* @param	array
	* @return	void
	*/
	public function randomGetList($bukkenData, $cnt, $errArray = array())
	{
		if(count($bukkenData) > $cnt)
		{
			// 除外リストを作成
			$errHyList = array();
			$errTmList = array();
			foreach ($errArray as $value) {
				$errHyList[] = $value['T03_ORIGINAL_HEYA_CD01'];
				$errTmList[] = $value['T03_TATEMONO_CD'];
			}
			
			// 配列から、除外リストにない建物・部屋を取得する
			$retBukenData = array();
			$retBukenKey  = array();
			$dataCnt = 0;
			foreach ($bukkenData as $key => $value)
			{
				if (!in_array($value['T03_ORIGINAL_HEYA_CD01'], $errHyList) && !in_array($value['T03_TATEMONO_CD'], $errTmList))
				{
					$retBukenData[] = $value;
					$retBukenKey[]  = $key;
					$errHyList[]    = $value['T03_ORIGINAL_HEYA_CD01'];
					$errTmList[]    = $value['T03_TATEMONO_CD'];
					$dataCnt++;
					if ($dataCnt >= $cnt) {
						break;
					}
				}
			}
			
			// 抽出物件が足りない場合、ランダムで追加する
			if ($dataCnt < $cnt)
			{
				// 既に抽出しているデータを配列から削除
				foreach ($retBukenKey as $key) {
					unset($bukkenData[$key]);
				}
				// 足りない分をランダムに抽出
				$randomKey = array_rand($bukkenData, $cnt-$dataCnt);
				if (is_array($randomKey)) {
					foreach ($randomKey as $key) {
						$retBukenData[] = $bukkenData[$key];
					}
				} else if (!empty($randomKey)) {
						$retBukenData[] = $bukkenData[$randomKey];
				}
			}
		}
		else
		{
			return $bukkenData;
		}

		return $retBukenData;
	}

	// 多次元配列のマージ
	public function array_marge_x($arr1, $arr2)
	{
		$arr_marge = array();
		foreach($arr1 as $value) {
			$arr_marge[] = $value;
		}
		foreach($arr2 as $value) {
			$arr_marge[] = $value;
		}
		return $arr_marge;
	}

	/**
	* 周辺の物件取得
	*
	* @access	public
	* @param	array
	* @return	void
	*/
	public function getVicinityList($params)
	{
		// 部屋CDが無い場合は無視
		if(!$this->_model_search_common->checkvalue($params, 'HeyaCd')) return array();
		
		// 物件情報取得
		$sql  = "";
		$sql .= self::getRecommendSelectPhrase_s();
		$sql .= " FROM T03WEB_HEYA";
		$sql .= "     ,(";
		$sql .= "        SELECT T03_HEYA_CD as HEYA_CD";
		$sql .= "              ,row_number() over (order by (T03_HEYA_CD - :heya_cd) + sign(T03_HEYA_CD - :heya_cd)*(-100000000000000)) as RANK";
		$sql .= "          FROM T03WEB_HEYA";
		$sql .= "         WHERE (T03_TODOUFUKEN_CD, T03_SHIKUCHOUSON_CD, T03_CHOUMEI_CD, T03_CHOUMOKU_CD) = ";
		$sql .= "        (select T03_TODOUFUKEN_CD, T03_SHIKUCHOUSON_CD, T03_CHOUMEI_CD, T03_CHOUMOKU_CD";
		$sql .= "           from T03WEB_HEYA";
		$sql .= "          where T03_HEYA_CD = :heya_cd)";
		$sql .= "           AND T03_HEYA_CD != :heya_cd";
		$sql .= "      )";
		$sql .= " WHERE T03_HEYA_CD = HEYA_CD";
		$sql .= "   AND RANK <= 4";
		
		$db_params = array('heya_cd' => $params['HeyaCd']);
		
		return $this->dbGetList($sql, $db_params, $this->_db);
	}

}
?>